#ifndef __DOUBLE_SQL_LIST_H__
#define __DOUBLE_SQL_LIST_H__

#include "log_in_data.h"

typedef struct Double_Node
{
    Log_in_data data; //数据域
    struct Double_Node * prev; //指向前一个结点的指针
    struct Double_Node * next; //指向下一个结点的指针
}Double_Node;

//定义双向链表结构体
typedef struct Double_Link_List
{
    Double_Node * next; //指向链表头结点的指针
}Double_Link_List;

// 数据操作
// 双向链表的创建
Double_Link_List* init_double_link_list();

// 双向链表的插入
void insert_double_node(Double_Link_List* list, Log_in_data data, int pos);

// 双向链表的删除
Log_in_data delete_double_node(Double_Link_List* list, int pos);

// 双向链表的查找
Double_Node* find_double_node_pos(Double_Link_List* list, int pos);
Double_Node* find_double_node_name(Double_Link_List* list, char* name);

// 双向链表的遍历
void print_forward_double_link_list(Double_Link_List* list);
void print_backwards_double_link_list(Double_Link_List* list);

// 双向链表的判空
int is_empty_double_link_list(Double_Link_List* list);

// 双向链表的清空
void clear_double_link_list(Double_Link_List* list);

// 双向链表的合并
Double_Link_List* merge_double_link_lists(Double_Link_List* list1, Double_Link_List* list2);

// 双向链表的销毁
void free_double_link_list(Double_Link_List ** list);

#endif